Пример #1
0
    def build_breadcrumb(self):
        # Build breadcrumb for selected category.
        breadcrumb = category_util.build_breadcrumb(self.selected_category)[1:-1]
        breadcrumb.reverse()

        for breadcrumb_category in breadcrumb:
            breadcrumb_category.url = reverse(
                'browse', kwargs={
                    'category_slug': breadcrumb_category.url
                }
            )

        self.breadcrumb = breadcrumb
Пример #2
0
    def get_serialized_category(self, category):
        # TODO(Varun): Cache this call.
        if category.id not in self.categories:
            breadcrumb = category_util.build_breadcrumb(category)
            self.categories[category.id] = {
                'id': category.id,
                'title': category.title,
                'slug': category.slug,
                'url': reverse(
                    'browse', kwargs={
                        'category_slug': breadcrumb[0].url
                    }
                )
            }

        return self.categories[category.id]
Пример #3
0
def standard(request, tag_title):
    # Get the tag.
    try:
        tag = Tag.objects.get(title=tag_title)
    except:
        raise Http404

    # Get public resources associated with the tag.
    from oer.models import Resource
    resources = Resource.objects.filter(tags=tag)[:20]

    category = Category.objects.filter(tags=tag)[0]

    breadcrumb = catU.build_breadcrumb(category)
    breadcrumb_urlized = []
    for breadcrumb_category in breadcrumb:
        if breadcrumb_category.parent.slug == 'standards':
            break

        try:
            breadcrumb_urlized.append(standard_urlize(breadcrumb_category.parent))
        
        # HACK(Varun): For practice standards whose parent has been ripped away.
        except:
            breadcrumb_category.url = ''    
            breadcrumb_urlized.append(breadcrumb_category)

    breadcrumb_urlized.reverse()

    context = {
        'tag': tag,
        'resources': resources,
        'breadcrumb': breadcrumb_urlized,
        'title': tag.title + " ‹ OpenCurriculum"
    }
    return render(request, 'standard.html', context)
Пример #4
0
def _get_category_url(node):
    import meta.CategoryUtilities as catU

    breadcrumb = catU.build_breadcrumb(node)
    return reverse("browse", kwargs={"category_slug": breadcrumb[0].url})
Пример #5
0
    def process_category_slug(self):
        categories_slugs = self.category_slug.split('/')

        # Determine the depth to figure out what level of page needs to be displayed.
        try:
            host_category = Category.objects.filter(slug=categories_slugs[0])
            if host_category.count() == 0:
                raise Http404
            else:
                host_category = host_category[0]

            if categories_slugs[0] != 'common-core':
                self.is_common_core_hosted = False
            else:
                self.is_common_core_hosted = True

            (host_browse_tree, host_flattened_tree) = category_util.build_child_categories(
                {'root': [host_category]}, [])

            # Assume that there is a unique pair of child/parent relationship in any
            #     host category. Breaks on the edge case where this pair is found twice.
            try:
                self.current_category = Category.objects.get(
                    slug=categories_slugs[-1], parent__slug=categories_slugs[-2])
            
            except IndexError:
                try:
                    self.current_category = Category.objects.get(slug=categories_slugs[-1])
                except MultipleObjectsReturned:
                    self.current_category = Category.objects.filter(slug=categories_slugs[-1])[0]
            
            except MultipleObjectsReturned:
                # Find the unique combinator inside the host tree.
                self.current_category = next(category for category in host_flattened_tree if(
                    category.slug == categories_slugs[-1] and category.parent.slug == categories_slugs[-2]))

            except Category.DoesNotExist:
                raise Http404

            # Determine subject if subject.
            try:
                self.subject_category = Category.objects.get(
                    slug=categories_slugs[1], parent__slug=categories_slugs[0])
            except:
                pass
            
            for category in host_flattened_tree:
                if category == self.current_category:
                    self.selected_category = category

            if not self.selected_category:
                raise Http404

            if len(categories_slugs) == 1:
                self.return_url = None
            else:            
                return_category_slug = category_util.build_breadcrumb(self.selected_category.parent.parent)[0].url
                if return_category_slug != '':
                    self.return_url = reverse(
                        'browse', kwargs={
                            'category_slug': return_category_slug
                        }
                    )
                else:
                    self.return_url = reverse('browse_default')

            if len(categories_slugs) == 2:
                self.is_subject_home = True

            # Build the breadcrumb associated with this slug.
            self.build_breadcrumb()

        except""" Exception, e""":
            # from django.core.mail import mail_admins
            # mail_admins('Browse failed to render category', str(e) + category_slug)

            # Happens either when the slug is not found.
            raise Http404


        return {
            'host_category': host_category,
        }
Пример #6
0
def build_child_tree(root_node):
    # Get the list of child of this node.
    nodes = list(itertools.chain.from_iterable(root_node.values()))
    node_elements = []

    # Create <li> nodes for each.
    for node in nodes:
        node_element = ElementTree.Element('li')

        if type(node) is dict:
            current_node = get_root_key(node)
        else:
            current_node = node

        # Determine whether the node is a tag or category.
        if type(current_node).__name__.lower() == 'category':
            node_type = 'category'
        else:
            node_type = 'tag'

        # If this child has other children, build child tree.
        # Has to be the case of our tag category.
        if type(node) is dict:
            # Set a class to indicate that this element has child collections.
            node_element.set('class', 'parent-category')

            node_toggler = ElementTree.SubElement(node_element, 'span')
            node_toggler.set('class', 'toggle-category')
            node_toggler.text = ' '

            node_href = ElementTree.SubElement(node_element, 'a')
    
            node_href.set('href', reverse('browse', kwargs={
                    'category_slug': catU.build_breadcrumb(current_node)[0].url }))
            node_href.set('id', 'category-' + str(current_node.id))            
            node_href.text = current_node.title

            nodeList = ElementTree.SubElement(node_element, 'ul')

            child_nodes = build_child_tree(node)
            for child_node in child_nodes:
                nodeList.append(child_node)

        # Otherwise, append a child <a> element as is.
        # Can be a tag category or a tag.
        else:
            # Set a class to indicate that this element does not have child collections.
            node_element.set('class', 'empty-category' if node_type == 'category' else 'empty-tag')

            node_toggler = ElementTree.SubElement(node_element, 'span')
            node_toggler.set(
                'class', 'toggle-category' if node_type == 'category' else 'toggle-tag')
            node_toggler.text = ' '

            node_href = ElementTree.SubElement(node_element, 'a')

            if node_type == 'category':
                node_href.set('href', reverse('browse', kwargs={
                    'category_slug': catU.build_breadcrumb(current_node)[0].url }))
            else:
                node_href.set('href', reverse('meta:standard', kwargs={
                    'tag_title': current_node.title }))

            node_href.set(
                'id', ('category-' if node_type == 'category' else 'tag-') + str(current_node.id))
            node_href.text = current_node.title if node_type == 'category' else (
                current_node.title + ': ' + (current_node.description if current_node.description else ''))

        node_elements.append(node_element)

    return node_elements